package com.superiron.scaffold.core.util;

import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.symmetric.AES;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;

import java.nio.charset.StandardCharsets;

/**
 * @author ：yzg
 * @date ：Created in 2022/7/29 17:08
 * @description：
 * @modified By：
 * @version: $
 */
public class MySecureUtil {
	
	/**
	 * AES加密
	 * @param securityKey 密码
	 * @param plaintext 明文
	 * @return
	 */
	public static String AESEncrypt(String securityKey, String plaintext) {
		// 生成秘钥，也可以手动指定
		// key：AES模式下，key必须为16位
		byte[] securityByte = StrUtil.padAfter(securityKey, 16, "0").getBytes(StandardCharsets.UTF_8);
		
		// iv：偏移量，ECB模式不需要，CBC模式下必须为16位
		byte[] key = cn.hutool.crypto.SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue(), securityByte).getEncoded();
		
		AES aes = new AES(key);
		
		return aes.encryptHex(plaintext);
	}
	
	/**
	 * AES解密
	 * @param securityKey 密码
	 * @param ciphertext 密文
	 * @return
	 */
	public static String AESDecrypt(String securityKey, String ciphertext) {
		// 生成秘钥，也可以手动指定
		// key：AES模式下，key必须为16位
		byte[] securityByte = StrUtil.padAfter(securityKey, 16, "0").getBytes(StandardCharsets.UTF_8);
		
		// iv：偏移量，ECB模式不需要，CBC模式下必须为16位
		byte[] key = cn.hutool.crypto.SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue(), securityByte).getEncoded();
		
		AES aes = new AES(key);
		// 解密
		return aes.decryptStr(ciphertext);
	}
	
	public static void main(String[] args) {
		MySecureUtil.AESEncrypt("123", "sdfsdf");
	}
}
